<?php
/**
 * @author fld
 *
 * 单例模式：单例对象的类必须保证只能有一个实例存在，
 * 它必须自行创建本身的实例；
 * 它必须自行向整个系统提供这个实例。
 * 单例模式是一种对象创建型模式。
 * 
 * 目的：保证一个类仅有一个实例，并提供一个访问它的全局访问点。
 * 因为每一次new操作都会消耗系统和内存的资源。
 * 应用场景：数据库连接、缓存操作、分布式存储。
 * 
 * 特点：
 * 	私有的构造方法 (防止类外实例化)
 *	私有的克隆方法 (防止通过克隆生成对象)
 *	私有的静态属性 (保存类的实例)
 *	公有的静态方法 (调取这个类相当一个接口 )
 */
class Singleton{
	
	private static $instance = null;
	
	private static $count = 0;
	//私有构造方法，禁止使用new创造对象
	private function __construct(){
		self::$count++;
	}

	public static function getInstance(){
		if(!isset(self::$instance)){
			self::$instance = new self;
		}
		return self::$instance;
	}
	//将克隆方法设为私有，禁止克隆对象
	private function __clone(){}
	
	public function action1(){
		echo "count:".self::$count.'<br/>';
	}
}

header("Content-type:text/html;charset=utf-8");

$single1 = Singleton::getInstance();
var_dump($single1);
$single2 = Singleton::getInstance();
var_dump($single2);
if($single1 == $single2){
	echo '单例模式类实例化一致';
}else{
	echo '单例模式类实例化不一致';
}
?>
